 #define _GNU_SOURCE
#include <stdio.h>
#include <stdarg.h>
#include<stdlib.h>
// 不定参宏函数的使用
#define LOG(fmt, ...) printf("[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__)

// c语言中不定参函数的使用
void print(int count, ...)
{
    va_list ap;
    va_start(ap, count); // 获取指定参数的起始位置，这里指的是count参数之后的第一个参数的起始位置
    for (int i = 0; i < count; i++)
    {
        printf("param[%d]:%d\n", i, va_arg(ap, int));
    }
    va_end(ap);//将ap指针置空
}

void myprintf(const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    char *res;
    int ret = vasprintf(&res, fmt, ap);
    if (ret != -1)
    {
        printf("%s",res);
        free(res);
    }
    va_end(ap);
}

int main()
{
    LOG("zjl");
    print(2, 123, 666);
    print(5, 1, 2, 3, 4, 5);
    myprintf("%s-%d\n","zjl",123);
    return 0;
}
